package com.itheima.canal;

import com.itheima.domain.MoneyLog;
import com.itheima.service.MoneyLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
import top.javatool.canal.client.annotation.CanalTable;
import top.javatool.canal.client.handler.EntryHandler;

import java.util.List;

/*****
 * @Author: http://www.itheima.com
 * @Description: com.itheima.canal.MoneyLogSync
 ****/
@CanalTable("money_log")
@Component
public class MoneyLogSync implements EntryHandler<MoneyLog> {

    @Autowired
    private MoneyLogService moneyLogService;

    @Autowired
    private RedisTemplate redisTemplate;

    @Autowired
    private RestTemplate restTemplate;

    /****
     * 监听的表中有数据增加了，则获取指定数据
     * @param moneyLog
     */
    @Override
    public void insert(MoneyLog moneyLog) {
        //用户抢到红包了,将用户红包信息同步到Redis
        //查询用户所有红包
        List<MoneyLog> moneyLogs = moneyLogService.list(moneyLog.getUsername());

        //将红包数据添加到Redis
        redisTemplate.boundHashOps("UserMoneyLog").put(moneyLog.getUsername(),moneyLogs);

        //更新Nginx缓存  http://192.168.23.128/purge/mlog/top
        try {
            String url = "http://192.168.23.128/purge/mlog/top";
            restTemplate.getForObject(url,String.class);
        } catch (RestClientException e) {
        }
    }

    /***
     * 指定表中数据发生改变的时候监听到
     * @param before：修改前的数据
     * @param after：修改后的数据
     */
    @Override
    public void update(MoneyLog before, MoneyLog after) {
    }

    /****
     * 删除的数据
     * @param moneyLog
     */
    @Override
    public void delete(MoneyLog moneyLog) {
        System.out.println("删除的数据ID："+moneyLog.getId());
    }
}
